import os
import pandas as pd
import glob


def rename_csv_columns(input_folder, output_folder):
    """
    将文件夹中所有CSV文件的列标题重命名
    第一列改为'rectime'，其余列改为'V0', 'V1', ..., 'V166'

    参数:
    input_folder: 输入文件夹路径
    output_folder: 输出文件夹路径
    """
    # 如果输出文件夹不存在，则创建
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"创建输出文件夹: {output_folder}")

    # 获取所有CSV文件
    csv_files = glob.glob(os.path.join(input_folder, "*.csv"))

    if not csv_files:
        print(f"在文件夹 {input_folder} 中没有找到CSV文件")
        return

    print(f"找到 {len(csv_files)} 个CSV文件")

    # 处理每个CSV文件
    for i, csv_file in enumerate(csv_files, 1):
        try:
            # 获取文件名
            filename = os.path.basename(csv_file)
            output_path = os.path.join(output_folder, filename)

            print(f"处理文件 {i}/{len(csv_files)}: {filename}")

            # 读取CSV文件
            df = pd.read_csv(csv_file)

            # 创建新的列名列表
            new_columns = []

            # 第一列改为'rectime'
            if len(df.columns) > 0:
                new_columns.append('rectime')

            # 其余列改为'V0', 'V1', ..., 'Vn'
            for j in range(1, len(df.columns)):
                new_columns.append(f'V{j - 1}')

            # 重命名列
            df.columns = new_columns

            # 保存到新文件夹
            df.to_csv(output_path, index=False)

            print(f"  成功处理: {filename} -> 列数: {len(df.columns)}")

        except Exception as e:
            print(f"  处理文件 {filename} 时出错: {str(e)}")

    print(f"\n处理完成! 所有文件已保存到: {output_folder}")


def rename_csv_columns_with_preview(input_folder, output_folder, preview_files=3):
    """
    带预览功能的列重命名函数
    可以先预览前几个文件的原列名和新列名

    参数:
    input_folder: 输入文件夹路径
    output_folder: 输出文件夹路径
    preview_files: 预览的文件数量
    """
    # 如果输出文件夹不存在，则创建
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)

    # 获取所有CSV文件
    csv_files = glob.glob(os.path.join(input_folder, "*.csv"))

    if not csv_files:
        print(f"在文件夹 {input_folder} 中没有找到CSV文件")
        return

    print(f"找到 {len(csv_files)} 个CSV文件")
    print("\n预览前几个文件的列名变化:")
    print("-" * 50)

    # 预览模式
    for i, csv_file in enumerate(csv_files[:preview_files], 1):
        try:
            df = pd.read_csv(csv_file)
            filename = os.path.basename(csv_file)

            # 创建新的列名列表
            new_columns = ['rectime'] + [f'V{j}' for j in range(len(df.columns) - 1)]

            print(f"文件: {filename}")
            print(f"原列名: {list(df.columns)}")
            print(f"新列名: {new_columns}")
            print(f"列数: {len(df.columns)}")
            print("-" * 30)

        except Exception as e:
            print(f"预览文件 {csv_file} 时出错: {str(e)}")

    # 确认是否继续
    response = input(f"\n确定要重命名所有 {len(csv_files)} 个文件的列标题吗? (y/n): ")
    if response.lower() != 'y':
        print("操作已取消")
        return

    # 执行重命名
    rename_csv_columns(input_folder, output_folder)


# 使用示例

    # 设置输入和输出文件夹路径
input_folder = r"F:\dataset\BQW_min\Group\A1"  # 替换为你的输入文件夹路径
output_folder = r"F:\dataset\BQW_min\Group\A1_new"  # 替换为你的输出文件夹路径
rename_csv_columns_with_preview(input_folder, output_folder, preview_files=3)
